<?php

/*
 * 股票趋势图和柱形图
 * @author: Skiychan <developer@zzzzy.com>
 * @created: 02/05/2015
 */

include "libs/pData.class.php";
include "libs/pDraw.class.php";
include "libs/pImage.class.php";

include "database.php";

include "libs/convert.php";
date_default_timezone_set('Asia/Shanghai');

/*
 * @param type line/other 趋势图/柱形图 默认趋势图
 * @param txt 1/other 显示/不显示 提示文字 默认不显示
 * @param lang hk/cn 繁体中文/简体中文 默认繁体
 * @param id int 股票编号 必填
 * @param min int 最小时间 默认无
 * @param max int 最大时间 默认无
 */

$type = isset($_GET['type']) ? $_GET['type'] : 'line';
$showtxt = (isset($_GET['txt']) && ($_GET['txt'] == 1)) ? true : false;

//设置语言
if (isset($_GET['lang'])) {
	$lang = $_GET['lang'] == 'cn' ? 'cn' : 'hk';
} else {
	$lang = 'hk';
} 

$desc_tip = array(
	'hk' => array(
		'line' => array("昨日收盤價", "股價"),
		'bar' => "總成交量："
	),
	'cn' => array(
		'line' => array("昨日收盘价", "股价"),
		'bar' => "总成交量："
	)
);

$id = isset($_GET['id']) ? (int)$_GET['id'] : 1;  //股票编码

//条件
$wheres = "where stock_no = ".$id;

//最小时间
if (isset($_GET['min'])) {
	$wheres .= " and `created` >= ".(int)$_GET['min'];
}
//最大时间
if (isset($_GET['max'])) {
	$wheres .= " and `created` <= ".(int)$_GET['max'];
}
$wheres .= " order by created";

$sth = $dbh->prepare("SELECT * FROM $tb_name " . $wheres);
$sth->execute();
$results = $sth->fetchAll(PDO::FETCH_ASSOC);

if ($lang == 'hk') {
	$ttf_path = "fonts/zh_hk.ttc";
} else {
	$ttf_path = "fonts/zh_cn.ttf";
}

//初始化
$line2 = array();  //股价
$bar = array();  //成交量
$times = array();  //时间

foreach ($results as $keys => $values) :
    $line2[] = $values['current_price'];
    $bar[] = $values['volume'];

    //只显示整点的标签
    if ($keys % 4 == 0) {
        $times[] = $values['created'];
    } else {
        $times[] = VOID;
    }

endforeach;

$l2counts = count($line2);

$myData = new pData();

//如果是线型图
if ($type == "line") {
	
//取股票名称	
	$stock_sth = $dbh->prepare("SELECT `name` FROM `tbl_stock` WHERE `code` = {$id}");
	$stock_sth->execute();
	$stock_info = $stock_sth->fetch(PDO::FETCH_ASSOC);

	$func_name = "zhconversion_".$lang;
	//$stock_name = $func_name($stock_info['name']);
    $stock_name = "某某公司";

//取出最值
    $sql = "SELECT  MIN(`current_price`) xiao, MAX(`current_price`) da FROM $tb_name $wheres";
    foreach ($dbh->query($sql, PDO::FETCH_ASSOC) as $row) {
        $bottom = (int)$row['xiao'] - 2;
        $top = (int)$row['da'] + 2;
    }

	//昨日收盘价
    $l1s = array();
    for ($i = 1; $i <= $l2counts; $i++) {
        $l1s[] = 130;
    }

    $myData->addPoints($l1s, "Line1");
    $myData->addPoints($line2, "Line2");

    $myData->setPalette("Line1",array("R"=>51,"G"=>114,"B"=>178));
    $myData->setPalette("Line2",array("R"=>0,"G"=>255,"B"=>0));

    $myData->setAxisPosition(0, AXIS_POSITION_RIGHT);
    $myData->addPoints($times, "Times");
    $myData->setSerieDescription("Times","Time");
    $myData->setAbscissa("Times");
    $myData->setXAxisDisplay(AXIS_FORMAT_TIME,"H:i");
	

    $myPicture = new pImage(480, 300, $myData);

	//设置默认字体
    $myPicture->setFontProperties(array("FontName" => "fonts/en_us.ttf", "FontSize" => 6));
	
//背景颜色
    //$Settings = array("StartR"=>219, "StartG"=>231, "StartB"=>139, "EndR"=>1, "EndG"=>138, "EndB"=>68, "Alpha"=>50);
    //$myPicture->drawGradientArea(0,0,480,300,DIRECTION_VERTICAL,$Settings);

//画格子和标签
    $myPicture->setGraphArea(10, 40, 440, 260);
    $AxisBoundaries = array(0 => array("Min" => $bottom, "Max" => $top));
    $Settings = array(
        "Mode" => SCALE_MODE_MANUAL,
        "GridR" => 200,
        "GridG" => 200,
        "GridB" => 200,
        "XMargin" => 0,
        "YMargin" => 0,
        //"DrawXLines" => false,
        "GridTicks" => 3,  //格子密度
        "ManualScale" => $AxisBoundaries,
    );
    $myPicture->drawScale($Settings);

//画线
    /*
    $line_arr = array(
        "ForceColor" => TRUE,
        "ForceR" => 0,
        "ForceG" => 0,
        "ForceB" => 255);
    $myPicture->drawLineChart($line_arr); */
    $myPicture->drawLineChart();

    //设置Line1为无效,再画底色
    $myData->setSerieDrawable("Line1",FALSE);

//画区域底线
    $area_arr = array(
        "ForceTransparency"=>15,  //透明度
    );
    $myPicture->drawAreaChart($area_arr);

	//是否显示文字
	if ($showtxt) {
		//标题
		$myPicture->drawText(200,30,$stock_name,array("FontName"=>$ttf_path, "FontSize"=>11,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE)); 
	
		//设置Line1为有效
		$myData->setSerieDrawable("Line1",TRUE);
		$myData->setSerieDescription("Line1",$desc_tip[$lang]['line'][0]);
		$myData->setSerieDescription("Line2",$desc_tip[$lang]['line'][1]);

		$myPicture->setFontProperties(array("FontName" => $ttf_path,"FontSize"=>8));
		$tips = array(
			"Style"=>LEGEND_NOBORDER,
			"Mode"=>LEGEND_HORIZONTAL,
			"FontR"=>0,"FontG"=>0,"FontB"=>0,
			);
		$myPicture->drawLegend(20,26,$tips);
	}

//柱形图
} else {

    $myData->addPoints($bar, "Bar");
    $myData->setPalette("Bar",array("R"=>51,"G"=>114,"B"=>178));  //设置柱子的颜色
    $myData->addPoints($times, "Times");
    $myData->setSerieDescription("Times","Time");
    $myData->setAbscissa("Times");
    $myData->setXAxisDisplay(AXIS_FORMAT_TIME,"H:i");

    $myPicture = new pImage(480, 200, $myData);
	
	//设置默认字体
    $myPicture->setFontProperties(array("FontName" => "fonts/en_us.ttf", "FontSize"=>6));
    $myPicture->Antialias = FALSE;

    $myPicture->setGraphArea(50,20,450,180);

    //网格及坐标
    $scaleSettings = array(
        "Mode" => SCALE_MODE_START0,
        "GridR"=>200,
        "GridG"=>200,
        "GridB"=>200);
    $myPicture->drawScale($scaleSettings);

    /*
    $Palette = array();
	for ($i = 0; $i <= $l2counts; $i++) {
		$Palette[$i] = array("R"=>74,"G"=>114,"B"=>178,"Alpha"=>100);
	}

	//$Palette = array("0"=>array("R"=>74,"G"=>114,"B"=>178,"Alpha"=>100));

    /* 覆盖画板色
    $barSetting = array(
        "OverrideColors"=>$Palette,
		);
    $myPicture->drawBarChart($barSetting);
    */

    $myPicture->drawBarChart();

	//是否显示文字
	if ($showtxt) {
		$tips = array(
			"Style"=>LEGEND_NOBORDER,
			"Mode"=>LEGEND_HORIZONTAL,
			"FontR"=>0,"FontG"=>0,"FontB"=>0,
		);

		$myPicture->setFontProperties(array("FontName" => $ttf_path,"FontSize"=>9));
        
        /*
		$alls = 0;  //总成交量初始化
		foreach ($bar as $value) {
			$alls += $value;
		}
        */
        $alls = array_sum($bar);
        
		$myData->setSerieDescription("Bar", $desc_tip[$lang]['bar'].$alls);
		
		$myPicture->drawLegend(300,9,$tips);
	}

}

$myPicture->stroke();
//$myPicture->autoOutput("image.png");

//保存日志
//file_put_contents("log.txt", json_encode($myData) . "\n");
?>